package vip.xiaonuo.megvii.captures.handle;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import org.springframework.web.multipart.MultipartFile;
import vip.xiaonuo.core.pojo.response.ResponseData;
import vip.xiaonuo.megvii.captures.model.base.BindingInfo;
import vip.xiaonuo.modular.megviipushdata.entity.MegviiPushData;
import vip.xiaonuo.modular.megviitrackidrelate.entity.MegviiTrackidRelate;
import vip.xiaonuo.sys.modular.file.enums.FileTypeEnum;
import vip.xiaonuo.sys.modular.file.service.SysFileInfoService;
import vip.xiaonuo.util.Base64ToImg;
import vip.xiaonuo.util.HttpPostFile;

import javax.validation.constraints.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 主动推送数据的接收 接口
 */
public interface ActivePushHandleImpl<T> {

    /**
     * @param data 推送的原始数据
     */
    void handle(@NotNull MegviiPushData data);

    /**
     * 将转换好的JavaBean转换成业务实体，并保存
     * @param t
     */
    void saveData(T t);

    /**
     * 保存关联信息
     * @param trackId
     * @param infos
     * @return
     */
    default List<MegviiTrackidRelate> createRelates(Long trackId ,List<BindingInfo> infos){
        List<MegviiTrackidRelate> relates = new ArrayList<>();
        if (infos == null){
            return relates;
        }

        for (BindingInfo bind : infos){
            // 转换关联数据
            MegviiTrackidRelate relate = new MegviiTrackidRelate();
            relate.setTrackId(trackId);
            relate.setRelateTrackId(bind.getBindingTrackId());
            relate.setBindingType(bind.getBindingType());
            relates.add(relate);
        }
        return relates;
    }

    // 保存图片
    default Long saveImg(String text_base64, String localUrl){
        if(!ObjectUtil.isNotEmpty(text_base64)){
            return null;
        }

        // 临时文件，保存之后还会再删除
        File file = Base64ToImg.generateFile(text_base64,"temp");

        // 使用方法传进来的 url
        String url = localUrl + "/sysFileInfo/upload";
        Map<String,File> map = new HashMap<>();
        map.put("file",file);
        String result = HttpPostFile.sendPost(url,map);
        ResponseData data = JSON.parseObject(result,ResponseData.class);
        if(data.getSuccess()){
            // 上传成功，删除临时文件
            file.delete();
            return Long.parseLong( data.getData() +"" );
        }else{
            return null;
        }
    }


    // 保存图片
    default Long saveImg(String text_base64, SysFileInfoService sysFileInfoService){
        if(!ObjectUtil.isNotEmpty(text_base64)){
            return null;
        }

        // 临时文件，保存之后还会再删除
        MultipartFile file = null;
        try {
            file = Base64ToImg.getMultipartFile(text_base64,"temp");
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sysFileInfoService.uploadFile(file, FileTypeEnum.AI_BOX);
    }
}
